import java.util.Scanner;

public class test {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();//数组个数
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = in.nextInt();
        }
        int[] result = getSort(arr, 0,arr.length-1 );
        for (int i = 0; i < n; i++) {
            System.out.print(result[i]);
        }
    }
    public static int[] getSort(int[] arr,int start,int end){
        //判断递归跳出
        if(end-start<=0){
            //表示此时只有一个元素
            return arr;
        }
        //记录end
        int flag = end;
        //从第一个下标开始,定义双指针,进行对比,找到对应位置之后,将现有数组分为两部分
        int left =start,right = end;
        while (left<=right){
            int tmp = 0;
            if(arr[left]>arr[right]){
                //元素交换
                tmp = arr[left];
                arr[left] = arr[right];
                arr[right]=tmp;
                //移动指针(右边指针)
                left++;
            }else {
                //左边元素比右边小,所以不进行移动,左指针向后移动
                right--;
            }
        }
        //遍历完之后得到第一轮的数组,分成两部分,再次调用函数
        //此时左右指针在同一位置上,表示第一个元素已经找到它的位置,再将数组进行拆分
        getSort(arr,0,left-1);//左边
        getSort(arr,left+1,flag);//右边
        return arr;
    }
}
